package com.crm.dao;

import com.crm.model.Process;

import java.util.List;

/**
 * @author <a href="mailto:huang0510@hotmail.com">HuangHuang</a>
 * @version $Id$
 */
public interface IProcessDao {

    /**
     * 保存业务处理信息实例。
     *
     * @param process 业务处理信息实例
     */
    void saveOrUpdate(Process process);

    /**
     * 按指定的唯一标识获取业务处理信息实例。
     *
     * @param id 业务处理信息的唯一标识。
     * @return 返回业务处理信息实例
     */
    Process getProcessById(String id);

    /**
     * 获取业务处理信息集合。
     *
     * @return 返回所有业务处理信息集合
     */
    List getProcesses();

    /**
     * 获取与指定联系人相关的业务处理信息集合。
     *
     * @param contactId 联系人编号
     * @return 返回与指定联系人相关的业务处理信息
     */
    List getProcessesByContactId(String contactId);

    /**
     * 获取与指定用户相关的业务处理信息集合。
     *
     * @param userCode 用户代码
     * @return 返回与指定用户相关的业务处理信息
     */
    List getProcessesByUserCode(String userCode);

    /**
     * 获取所有未处理的业务沟通信息集合。
     *
     * @return 返回所有未处理的业务沟通信息。
     */
    List getProcessesByNoHandle();

    /**
     * 获取指定用户名下所有未处理的业务沟通信息集合。
     *
     * @param userCode 用户编号。
     * @return 返回指定用户名下所有未处理的业务沟通信息。
     */
    List getProcessesByNoHandle(String userCode);

    /**
     * 获取某联系人最后一次沟通信息的序号。
     *
     * @param contactId 联系人ID
     * @return 返回沟通记录序号。
     */
    String getLastSerialNum(String contactId);

    /**
     * 按关键字检索指定用户名下的业务沟通信息。
     *
     * @param userCode      用户编号
     * @param customerName  相关客户
     * @param contactName   相关联系人
     * @param communeTime   沟通时间
     * @return 返回指定用户相关的业务沟通信息。
     */
    List getProcessesByKeywords(String userCode, String customerName, String contactName, String communeTime);

    /**
     * 按关键字检索业务沟通信息。
     *
     * @param customerName  相关客户
     * @param contactName   相关联系人
     * @param communeTime   沟通时间
     * @return 返回指定用户相关的业务沟通信息。
     */
    List getProcessesByKeywords(String customerName, String contactName, String communeTime);

    /**
     * 删除一条业务沟通信息。
     *
     * @param process 业务沟通信息实体。
     */
    void delete(Process process);

    /**
     * Delete all process information with pointed contact id.
     *
     * @param contactId - The id of contact.
     * @return int - The number of deleted.
     */
    int deleteAll(String contactId);

    List getRecycleProc(String contactId);
}
